package com.fotkidemo.network;

import android.util.Log;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;


/**
 * Created with IntelliJ IDEA.
 * User: roma
 * Date: 6/18/12
 * Time: 1:10 AM
 * To change this template use File | Settings | File Templates.
 */

/**
 * Методы для открытия соединений и получения запросов от сервера
 */
public class NetworkUtil {
    private static final String TAG = "NetworkUtil";

    /**
     * Получить json- ответ при запросе по указанной ссылке
     * @param url - открыть соединение по указанному адресу
     * @return - строку с json- ответом, которая преобразуется из inputStream
     * @throws IOException
     */
    public static String loadInfo(String url) throws IOException {
        StringBuilder builder = new StringBuilder();
        InputStream in = null;

        try {
            in = downloadUrl(url);

            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }

            reader.close();

        } finally {
            if (in != null) {
                in.close();
            }
        }


        return builder.toString();
    }

    /**
     * Открыть соединение по указанному адресу и скачать в файл
     * @param urlString - адрес, по которому открывается соединение
     * @param file - файл на устройстве, куда записывается скачанная информация
     * @return файл на устройстве или null в случае неудачи записи в файл или при ошибке в соединении
     * @throws IOException
     */
    public static File downloadToFile(String urlString, File file) throws IOException {

        HttpURLConnection urlConnection = null;
        BufferedOutputStream out = null;

        try {
            final URL url = new URL(urlString);
            urlConnection = (HttpURLConnection) url.openConnection();
            final InputStream in =
                    new BufferedInputStream(urlConnection.getInputStream());
            out = new BufferedOutputStream(new FileOutputStream(file));

            int b;
            while ((b = in.read()) != -1) {
                out.write(b);
            }

            return file;

        } catch (final IOException e) {
            Log.e(TAG, new StringBuilder("Error in downloadImage - ").append(e).toString());
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
            if (out != null) {
                try {
                    out.close();
                } catch (final IOException e) {
                    Log.e(TAG, new StringBuilder("Error in downloadImage - ").append(e).toString());
                }
            }
        }

        return null;
    }

    /**
     * Открыть соединение по указанному адресу и вернуть inputStream
     */
    private static InputStream downloadUrl(String urlString) throws IOException {
        java.net.URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("accept", "application/json");
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setDoInput(true);
        // Выполнить запрос
        conn.connect();
        InputStream stream = conn.getInputStream();
        return stream;
    }
}
